package hasCycle;

import java.util.*;
//
//public class Solution {
//      class ListNode {
//      int val;
//      ListNode next;
//      ListNode(int x) {
//          val = x;
//          next = null;
//      }
//  }
////    public boolean hasCycle(ListNode head) {
////          // 判断是否有环  哈希表
//////        Set<ListNode> set = new HashSet<>();
//////        ListNode p = head;
//////        while (p!=null) {
//////            if(!set.add(p)) {
//////                return true;
//////            }
//////        }
//////        return false;
////
////        // 龟兔赛跑判环法
////        // 定义一个快指针和一个慢指针 如果快指针能追上慢指针的话 就说明有环 反之 则无
////    }
//}
public class Solution {
    class ListNode {
        int val;
        ListNode next;
        ListNode(int x) {
            val = x;
            next = null;
        }
    }
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) {
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while (slow != fast) {
            if (fast == null || fast.next == null) {
                return false;
            }
            slow = slow.next;
            fast = fast.next.next;
        }
        return true;
    }
}


